package revolucion.classes;

import revolucion.database.Database;

import javax.swing.JOptionPane;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class User {
  private int id;
  private String username;
  private String displayName;
  private String email;
  private String status;

  static Connection conn;
  static Statement stmt;
  static ResultSet rs;

  public int getId() { return id; }
  public void setId( int _id ) { this.id = _id; }

  public String getUsername() { return username; }
  public void setUsername( String _user ) { this.username = _user; }
  public void saveUsername( User _user, String _username ) {
    Database.saveUser( _user.getUsername(), "user", _username );
  }

  public String getDisplayName() { return displayName; }
  public void setDisplayName(String _displayName) { this.displayName = _displayName; }
  public void saveDisplayName( User _user, String _displayName ) {
    Database.saveUser( _user.getUsername(), "displayName", _displayName );
  }

  public String getEmail() { return email; }
  public void setEmail(String _email) { this.email = _email; }
  public void saveEmail( User _user, String _email ) {
    Database.saveUser( _user.getUsername(), "email", _email );
  }

  public String getStatus() { return status; }
  public void setStatus( User _user, String _status ) {
    Database.saveUser( _user.getUsername(), "status", _status );
  }

  public User loadUser( String _userName ) {
    conn = Database.getConnection();

    try {
      stmt = conn.createStatement();
      rs = stmt.executeQuery("SELECT * FROM users WHERE user='"+_userName+"'");

      while(rs.next()) {
        this.id = rs.getInt("id");
        this.username = rs.getString("user");
        this.displayName = rs.getString("displayName");
        this.email = rs.getString("email");
      }
    } catch ( Exception e) {
      JOptionPane.showMessageDialog(null, "Ocorreu um erro ao atualizar o usuário!\nContate o administrador do sistema.");
      Log.writeLog( _userName, "Erro ao carregar usuário", e.getMessage() );
      System.out.println(e.getMessage());
    }

    return this;
  }

  public void updateUser( User _user, User _target, String _username, String _name, String _email ) {
    conn = Database.getConnection();

    try {
      stmt.execute("UPDATE users SET user='"+_username+"', displayName='"+_name+"', email='"+_email+"' WHERE user='"+_target.getUsername()+"'");

      JOptionPane.showMessageDialog(null, "Usuário atualizado com sucesso!");
      Log.writeLog( _user.getUsername(), "Usuário " + _username + " atualizado.", "OK" );
    } catch ( SQLException e) {
      JOptionPane.showMessageDialog(null, "Ocorreu um erro ao atualizar o usuário!\nContate o administrador do sistema.");
      Log.writeLog( _user.getUsername(), "Erro ao atualizar usuário " + _username + ".", e.getMessage() );
      System.out.println(e.getMessage());
    }
  }

  public static void saveUser( User _user, String _username, String _name, String _email){
    conn = Database.getConnection();

    try {
      stmt.execute("INSERT INTO users VALUES(null,'"+_username+"', '12345', '"+_name+"', '"+_email+"', 'offline')");

      JOptionPane.showMessageDialog(null, "Usuário cadastrado com sucesso!");
      Log.writeLog( _user.getUsername(), "Usuário " + _username + " cadastrado.", "OK" );
    } catch ( SQLException e) {
      JOptionPane.showMessageDialog(null, "Ocorreu um erro ao cadastrar o usuário!\nContate o administrador do sistema.");
      Log.writeLog( _user.getUsername(), "Erro ao cadastrar usuário " + _username + ".", e.getMessage() );
      System.out.println(e.getMessage());
    }
  }
}
